package cn.shujuhai.cms.controller.template;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.shujuhai.cms.domain.SysTemplate;
import cn.shujuhai.cms.domain.SysTemplateType;
import cn.shujuhai.cms.service.SysTemplateService;
import cn.shujuhai.common.aop.SysLog;
import cn.shujuhai.common.domain.PageRequest;
import cn.shujuhai.common.pluging.data.ResultVo;
import com.github.pagehelper.PageInfo;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author: myh
 * @Date: 2024/12/5 12:01
 * @Description: 提供表【sys_template(模板)】的操作接口
 **/
@RestController
@RequestMapping("/cms/template")
@RequiredArgsConstructor
public class SysTemplateController {
    final SysTemplateService sysTemplateService;

    /**
     * 分页查询模板
     *
     * @param templateName 模板名称
     * @param type         模板类型
     * @param pageRequest
     * @return 模板信息分页查询结果
     */
    @SysLog(value = "分页查询模板", operationType = "查询", module = "模板模块")
    @GetMapping("/list")
    public ResultVo<?> getTemplatesByNameAndType(
            @RequestParam(defaultValue = "") String templateName,
            @RequestParam(defaultValue = "") String type,
            @Valid PageRequest pageRequest) {
        PageInfo<SysTemplate> pageInfo = this.sysTemplateService.getPagedTemplatesByNameAndType(templateName, type, pageRequest.getPageNum(), pageRequest.getPageSize());
        return ResultVo.success(pageInfo);
    }

    /**
     * 获取模板类型列表
     *
     * @return 模板类型列表
     */
    @SaCheckPermission("template_list")
    @GetMapping("/getTypeList")
    public ResultVo<?> getTypeList() {
        List<SysTemplateType> types = this.sysTemplateService.getTypeList();
        return ResultVo.success(types);
    }

    /**
     * 获取模板类型列表(公共模板)
     *
     * @return 模板类型列表
     */
    @SaCheckPermission("channel_list")
    @GetMapping("/getTemplateTypeList")
    public ResultVo<?> getTemplateTypeList() {
        List<SysTemplateType> types = this.sysTemplateService.getTemplateTypeList();
        return ResultVo.success(types);
    }

    /**
     * 根据模板类型ID获取模板列表
     *
     * @param templateTypeId 模板类型ID
     * @return 模板列表结果信息
     */
    @SaCheckPermission("channel_list")
    @GetMapping("/getListByTypeId")
    public ResultVo<?> getTemplateListByTypeId(@RequestParam Long templateTypeId) {
        List<SysTemplate> sysTemplateList = this.sysTemplateService.getTemplateListByTypeId(templateTypeId);
        return ResultVo.success(sysTemplateList);
    }

    /**
     * 获取所有模板详细页列表
     *
     * @return 模板详细页列表结果信息
     */
    @SaCheckPermission("channel_list")
    @GetMapping("/getDetailList")
    public ResultVo<?> getListByCode() {
        List<SysTemplate> sysTemplateList = this.sysTemplateService.getListByCode();
        return ResultVo.success(sysTemplateList);
    }

    /**
     * 新增模板
     *
     * @param sysTemplate 模板对象
     * @return 结果信息
     */
    @SysLog(value = "新增模板", operationType = "新增", module = "模板模块")
    @PostMapping("/add")
    public ResultVo<?> addTemplate(@RequestBody @Valid SysTemplate sysTemplate) {
        return this.sysTemplateService.addTemplate(sysTemplate);
    }

    /**
     * 根据模板ID获取模板内容
     *
     * @param templateId 模板ID
     * @return 模板内容结果信息
     */
    @GetMapping("/select/{templateId}")
    public ResultVo<?> getTemplateById(@PathVariable Long templateId) {
        SysTemplate sysTemplate = this.sysTemplateService.getTemplateById(templateId);
        return ResultVo.success(sysTemplate);
    }

    /**
     * 修改模板
     *
     * @param sysTemplate 模板对象
     * @return 结果信息
     */
    @SysLog(value = "修改模板", operationType = "修改", module = "模板模块")
    @PostMapping("/update")
    public ResultVo<?> updateSetting(@RequestBody @Valid SysTemplate sysTemplate) {
        return this.sysTemplateService.update(sysTemplate);
    }

    /**
     * 删除模板
     *
     * @param templateId 模板ID
     * @return 结果信息
     */
    @SysLog(value = "删除模板", operationType = "删除", module = "模板模块")
    @DeleteMapping("/delete/{templateId}")
    public ResultVo<?> deleteTemplate(@PathVariable Long templateId) {
        return this.sysTemplateService.delById(templateId);
    }
}


